package br.ufc.minijavaufc.visitor;

import br.ufc.minijavaufc.ast.AndExpression;
import br.ufc.minijavaufc.ast.ArrayAssignExpression;
import br.ufc.minijavaufc.ast.ArrayAssignStatement;
import br.ufc.minijavaufc.ast.ArrayInstantiationExpression;
import br.ufc.minijavaufc.ast.ArrayLengthExpression;
import br.ufc.minijavaufc.ast.ArrayLookupExpression;
import br.ufc.minijavaufc.ast.AssignStatement;
import br.ufc.minijavaufc.ast.BlockStatement;
import br.ufc.minijavaufc.ast.BooleanType;
import br.ufc.minijavaufc.ast.ClassDeclaration;
import br.ufc.minijavaufc.ast.ClassDeclarationList;
import br.ufc.minijavaufc.ast.Expression;
import br.ufc.minijavaufc.ast.ExpressionList;
import br.ufc.minijavaufc.ast.ExtendedClassDeclaration;
import br.ufc.minijavaufc.ast.FalseExpression;
import br.ufc.minijavaufc.ast.Formal;
import br.ufc.minijavaufc.ast.FormalList;
import br.ufc.minijavaufc.ast.FormalRest;
import br.ufc.minijavaufc.ast.Identifier;
import br.ufc.minijavaufc.ast.IdentifierExpression;
import br.ufc.minijavaufc.ast.IdentifierType;
import br.ufc.minijavaufc.ast.IfStatement;
import br.ufc.minijavaufc.ast.IntegerArrayType;
import br.ufc.minijavaufc.ast.IntegerInstantiationExpression;
import br.ufc.minijavaufc.ast.IntegerType;
import br.ufc.minijavaufc.ast.LessThanExpression;
import br.ufc.minijavaufc.ast.Literal;
import br.ufc.minijavaufc.ast.LiteralExpression;
import br.ufc.minijavaufc.ast.MainClass;
import br.ufc.minijavaufc.ast.MethodCallExpression;
import br.ufc.minijavaufc.ast.MethodDeclaration;
import br.ufc.minijavaufc.ast.MethodDeclarationList;
import br.ufc.minijavaufc.ast.MinusExpression;
import br.ufc.minijavaufc.ast.NotExpression;
import br.ufc.minijavaufc.ast.PlusExpression;
import br.ufc.minijavaufc.ast.Program;
import br.ufc.minijavaufc.ast.SimpleClassDeclaration;
import br.ufc.minijavaufc.ast.Statement;
import br.ufc.minijavaufc.ast.StatementList;
import br.ufc.minijavaufc.ast.SysoStatement;
import br.ufc.minijavaufc.ast.This;
import br.ufc.minijavaufc.ast.TimesExpression;
import br.ufc.minijavaufc.ast.TrueExpression;
import br.ufc.minijavaufc.ast.Type;
import br.ufc.minijavaufc.ast.VarDeclaration;
import br.ufc.minijavaufc.ast.VarDeclarationList;
import br.ufc.minijavaufc.ast.WhileStatement;

public interface TypeVisitor {
	public Type visit(AndExpression andExpression);

	public Type visit(ArrayAssignExpression arrayAssignExpression);

	public Type visit(ArrayAssignStatement arrayAssignStatement);

	public Type visit(ArrayInstantiationExpression arrayInstantiationExpression);

	public Type visit(ArrayLengthExpression arrayLengthExpression);

	public Type visit(ArrayLookupExpression arrayLookupExpression);

	public Type visit(AssignStatement assignStatement);

	public Type visit(BlockStatement blockStatement);

	public Type visit(BooleanType booleanType);

	public Type visit(ClassDeclaration classDeclaration);

	public Type visit(ClassDeclarationList classDeclarationList);

	public Type visit(Expression expression);

	public Type visit(ExpressionList expressionList);

	public Type visit(ExtendedClassDeclaration extendedClassDeclaration);

	public Type visit(FalseExpression falseExpression);

	public Type visit(Formal formal);

	public Type visit(FormalList formalList);

	public Type visit(FormalRest formalRest);

	public Type visit(Identifier identifier);

	public Type visit(IdentifierExpression identifierExpression);

	public Type visit(IdentifierType identifierType);

	public Type visit(IfStatement ifStatement);

	public Type visit(IntegerArrayType integerArrayType);

	public Type visit(IntegerInstantiationExpression integerInstantiationExpression);

	public Type visit(IntegerType integerType);

	public Type visit(LessThanExpression lessThanExpression);

	public Type visit(Literal literal);

	public Type visit(LiteralExpression literalExpression);

	public Type visit(MainClass mainClass);

	public Type visit(MethodCallExpression methodCallExpression);

	public Type visit(MethodDeclaration methodDeclaration);

	public Type visit(MethodDeclarationList methodDeclarationList);

	public Type visit(MinusExpression minusExpression);

	public Type visit(NotExpression notExpression);

	public Type visit(PlusExpression plusExpression);

	public Type visit(Program program);

	public Type visit(SimpleClassDeclaration simpleClassDeclaration);

	public Type visit(Statement statement);

	public Type visit(StatementList statementList);

	public Type visit(SysoStatement sysoStatement);

	public Type visit(This this1);

	public Type visit(TimesExpression timesExpression);

	public Type visit(TrueExpression trueExpression);

	public Type visit(Type type);

	public Type visit(VarDeclaration varDeclaration);

	public Type visit(VarDeclarationList varDeclarationList);

	public Type visit(WhileStatement whileStatement);
}
